home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / metasploit / encoders / PexFnstenvMov.pm < prev    next >
Text File  |  2006-06-30  |  2KB  |  56 lines

  1.  
  2. ##
  3. # This file is part of the Metasploit Framework and may be redistributed
  4. # according to the licenses defined in the Authors field below. In the
  5. # case of an unknown or missing license, this file defaults to the same
  6. # license as the core Framework (dual GPLv2 and Artistic). The latest
  7. # version of the Framework can always be obtained from metasploit.com.
  8. ##
  9.  
  10. package Msf::Encoder::PexFnstenvMov;
  11. use strict;
  12. use base 'Msf::Encoder::XorDword';
  13. use Pex::Encoder;
  14. use Pex::x86;
  15.  
  16. my $advanced = {
  17. };
  18.  
  19. my $info = {
  20.   'Name'    => 'Pex Variable Length Fnstenv/mov Double Word Xor Encoder',
  21.   'Version' => '$Revision: 1.15 $',
  22.   'Authors' => [ 'spoonm <ninjatools [at] hush.com>', ],
  23.   'Arch'    => [ 'x86' ],
  24.   'OS'      => [ ],
  25.   'Description'  =>  'Variable-length fnstenv/mov dword xor encoder',
  26.   'Refs'    => [ ],
  27. };
  28.  
  29. sub new {
  30.   my $class = shift; 
  31.   return($class->SUPER::new({'Info' => $info, 'Advanced' => $advanced}, @_));
  32. }
  33.  
  34. sub _GenEncoder {
  35.   my $self = shift;
  36.   my $xor = shift;
  37.   my $len = shift;
  38.   my $badchars = shift;
  39.   my $xorkey = pack('V', $xor);
  40.  
  41.  
  42.   # spoon's smaller variable-length fnstenv encoder
  43.   my $decoder =
  44.     Pex::x86::Mov((($len - 1) / 4) + 1, "ecx", $badchars).
  45.     "\xd9\xee".                         # fldz
  46.     "\xd9\x74\x24\xf4".                 # fnstenv [esp - 12]
  47.     "\x5b".                             # pop ebx
  48.     "\x81\x73\x13". $xorkey .           # xor_xor: xor DWORD [ebx + 22], xorkey
  49.     "\x83\xeb\xfc".                     # sub ebx,-4
  50.     "\xe2\xf4";                         # loop xor_xor
  51.  
  52.   return($decoder);
  53. }
  54.  
  55. 1;
  56.